CC=gcc
CFLAGS=-lfl
CXX=g++
CXXFLAGS=
LEX=flex
YACC=bison -t -d

.PHONY: all
all: build-frontend run-frontend build-transpiler run-transpiler

.PHONY: build-frontend
build-frontend: build-parser build-lexer
	cd build && $(CC) lex.yy.c commonlisp2transpilerstr.tab.c $(CFLAGS) -o frontend.out

.PHONY: build-lexer
build-lexer:
	cd frontend && $(LEX) commonlisp2transpilerstr.l && mkdir -p ../build/ && mv lex.yy.c ../build/

.PHONY: build-parser
build-parser:
	cd frontend && $(YACC) commonlisp2transpilerstr.y && mkdir -p ../build/ && mv commonlisp2transpilerstr.tab.* ../build/

.PHONY: run-frontend
run-frontend:
	cd build/ && ./frontend.out < ../src.cl >> CLTree.h

.PHONY: build-transpiler
build-transpiler:
	cd src/ && $(CXX) *.cpp */*.cpp $(CXXFLAGS) -o cltranspiler.out && mkdir -p ../build/ && mv cltranspiler.out ../build/

.PHONY: run-transpiler
run-transpiler:
	cd build/ && ./cltranspiler.out && mv transpiled.ll ..

.PHONY: tests
tests:
	cd tests && $(CXX) 'Tests_ALL.cpp' ../src/*/*.cpp $(CXXFLAGS) && ./a.out
